<?


JCAT_Package::ImportClass( ROOT_PATH.'Classes/Coder/class.CoderDocBase.php') ;

abstract class JCATProjectDocBase extends CoderDocBase 
{
	
	/**
	 * what's this
	 * 
	 * @access	public
	 * @param	$sName		string	What's this Parameter ?
	 * @param	$sPath=''	string	What's this Parameter ?
	 * @return	array
	 */
	public function JCATProjectDocBase($sName,$sPath='')
	{
		$this->CoderDocBase( $sName, $sPath ) ;
		
		// 初始化文档结构
		
	}

	/**
	 * 项目的 UITemplate 类
	 * @return string
	 */
	abstract public function GetUITemplateClassName() ; 
	/**
	 * 项目的 UITemplate 包
	 * @return string
	 */
	abstract public function GetUITemplatePackage() ;
	
	
	/**
	 * 是否使用数据库
	 * 
	 * @access	public
	 * @return	bool
	 */
	public function IfUseDB()
	{
		return $this->Get('UseDB') ? true: false ;
	}
	
	/**
	 * 取得设定的 UITemplate 目录
	 * 
	 * @access	public
	 * @param	$bRealpath=false	bool	是否转换为决定路径
	 * @return	array
	 */
	public function GetUITemplateDirs($bRealpath=false)
	{
		return $this->GetDirLst('UITemplateDirs',$bRealpath) ;
	}

	/**
	 * 取得设定的 语言包 目录
	 * 
	 * @access	public
	 * @param	$bRealpath=false	bool	是否转换为决定路径
	 * @return	array
	 */
	public function GetLanguageDirs($bRealpath=false)
	{
		return $this->GetDirLst('LanguageDirs',$bRealpath) ;
	}
	
	/**
	 * 取得设定的 类 目录
	 * 
	 * @access	public
	 * @param	$bRealpath=false	bool	是否转换为决定路径
	 * @return	array
	 */
	public function GetClassDirs($bRealpath=false)
	{
		return $this->GetDirLst('ClassDirs',$bRealpath) ;
	}
	
	
	private function GetDirLst($sItemName,$bRealpath=false)
	{
		$arrRet = array () ;
		$sPath = $this->GetPath() ;
		$sAppDir = dirname($sPath).'/' ;
		
		$arrDirs = $this->Get($sItemName) ;
		JCAT_ASSERT::ASSERT_NOTNULL($arrDirs);
		
		foreach ($arrDirs as $arrItem)
		{
			$sDir = $arrItem[0];
			$sDir = trim($sDir) ;
			
			if( $sDir=='' )
			{
				continue ;
			}
			
			// 转换为决定路径
			if( !JCAT_FSO::IsAbsolutePath($sDir) )
			{
				if($bRealpath)
				{
					$sDir = JCAT_Global::TidyPath($sAppDir.$sDir) ;
				}
				else
				{
					$sDir = "ROOT_PATH.'{$sDir}'" ;
				}
			}
			
			$arrRet[] = $sDir ;
		}
		
		return $arrRet ;
	}

	/**
	 * 将序列化以后的内容存入到 文档
	 * 
	 * @access	protected
	 * @param	$sPath				文件路径
	 * @param	$sByteContents		字节内容
	 * @param	$bAsBinary			作为二进制存储
	 * @return	bool
	 */
	protected function SaveToFile( $sPath, $sByteContents, $bAsBinary=false )
	{
		// 调用父类
		parent::SaveToFile( $sPath, $sByteContents, $bAsBinary ) ;

		// 子模版
		$sHere = dirname(__FILE__).'/' ;
		$arrSubTemplate = array(
			'Base Setting' => $sHere.'template.BaseSetting.php'
			, 'DB And Language Setting' => $sHere.'template.DBAndLanguageSetting.php'
			, 'Import Directory' => $sHere.'template.ImportDirectory.php'
		) ;

		// 使用 子模版 产生代码
		foreach ($arrSubTemplate as $sBlockName=>$sSubTemplatePath)
		{
			$aTemplate = new JCAT_UIHtml() ;
			$aTemplate->SetVar('TheDoc',$this) ;
			
			// 产生代码
			$sCode = $aTemplate->Display($sSubTemplatePath,false) ;
			
			// 保存代码
			$this->WirteUnmodifiableBlock(
					$sPath
					, $sBlockName
					, $sCode
					, CoderDocBase::UnmodifiableBlockKind_Code
					, 0
			) ;
		}
		
		// 完成 返回 
		return true ;
	}

}

JCAT_Package::ImportClass('JCAT_UIHtml',JCAT::PACKAGE_UIHTML) ;
?>